***************** Replication of Franchino, Fabio, and Camilla Mariotto. “Bargaining Outcomes and Success in EU Economic Governance Reforms”. Political Science Research and Methods.

* Step 1 to reproduce Figure 2

version 16

******************************* SENSITIVITY ANALYSIS  - Add Gaussian random noise to positions
*************   COMPUTING POINT PREDICTIONS: Mean model
clear all
set obs 1
gen v = _n/10
save mad_m_mean_noise.dta, replace

set seed 1234

local m =  1  /* iteration per each s.d. value */
while `m' <= 1000 {

local v = 0.1  /* v is s.d of Gaussian noise - s.d. of country and institutional positions is 41.74882 */
while `v' <= 42.1 {
* Upload original dataset
use NBSmodel_data.dta, clear
gen v = `v'
gen m_mean = 0
gen utility_star = .
gen utility = .
order utility utility_star m_mean

* Add Gaussian noise N(0,v) to Commission positions
generate random = rnormal(0,`v')
replace comm=comm+random
replace comm=100 if comm>100 
replace comm=0   if comm<0 

* Add Gaussian noise N(0,v) to Parliament positions
replace random = rnormal(0,`v')
replace ep_1=ep_1+random
replace ep_1=100 if ep_1>100 
replace ep_1=0   if ep_1<0 

* Add Gaussian noise N(0,v) to country positions
local j = 1
while `j' <= 27 {
replace random = rnormal(0,`v')
replace country`j'=country`j'+random if country`j'!=.
replace country`j'=100 if country`j'>100 
replace country`j'=0   if country`j'<0 
local j = `j' + 1
}

* Gradient ascent procedure
local i = 0
while `i' <= 100 {
replace utility =	-	(`i'-	country1	)^2 if	salience1	> 0 &	salience1	!= .
replace utility = utility + (	-	(`i'-	country2	)^2) if	salience2	> 0 &	salience2	!= .
replace utility = utility + (	-	(`i'-	country3	)^2) if	salience3	> 0 &	salience3	!= .
replace utility = utility + (	-	(`i'-	country4	)^2) if	salience4	> 0 &	salience4	!= .
replace utility = utility + (	-	(`i'-	country5	)^2) if	salience5	> 0 &	salience5	!= .
replace utility = utility + (	-	(`i'-	country6	)^2) if	salience6	> 0 &	salience6	!= .
replace utility = utility + (	-	(`i'-	country7	)^2) if	salience7	> 0 &	salience7	!= .
replace utility = utility + (	-	(`i'-	country8	)^2) if	salience8	> 0 &	salience8	!= .
replace utility = utility + (	-	(`i'-	country9	)^2) if	salience9	> 0 &	salience9	!= .
replace utility = utility + (	-	(`i'-	country10	)^2) if	salience10	> 0 &	salience10	!= .
replace utility = utility + (	-	(`i'-	country11	)^2) if	salience11	> 0 &	salience11	!= .
replace utility = utility + (	-	(`i'-	country12	)^2) if	salience12	> 0 &	salience12	!= .
replace utility = utility + (	-	(`i'-	country13	)^2) if	salience13	> 0 &	salience13	!= .
replace utility = utility + (	-	(`i'-	country14	)^2) if	salience14	> 0 &	salience14	!= .
replace utility = utility + (	-	(`i'-	country15	)^2) if	salience15	> 0 &	salience15	!= .
replace utility = utility + (	-	(`i'-	country16	)^2) if	salience16	> 0 &	salience16	!= .
replace utility = utility + (	-	(`i'-	country17	)^2) if	salience17	> 0 &	salience17	!= .
replace utility = utility + (	-	(`i'-	country18	)^2) if	salience18	> 0 &	salience18	!= .
replace utility = utility + (	-	(`i'-	country19	)^2) if	salience19	> 0 &	salience19	!= .
replace utility = utility + (	-	(`i'-	country20	)^2) if	salience20	> 0 &	salience20	!= .
replace utility = utility + (	-	(`i'-	country21	)^2) if	salience21	> 0 &	salience21	!= .
replace utility = utility + (	-	(`i'-	country22	)^2) if	salience22	> 0 &	salience22	!= .
replace utility = utility + (	-	(`i'-	country23	)^2) if	salience23	> 0 &	salience23	!= .
replace utility = utility + (	-	(`i'-	country24	)^2) if	salience24	> 0 &	salience24	!= .
replace utility = utility + (	-	(`i'-	country25	)^2) if	salience25	> 0 &	salience25	!= .
replace utility = utility + (	-	(`i'-	country26	)^2) if	salience26	> 0 &	salience26	!= .
replace utility = utility + (	-	(`i'-	country27	)^2) if	salience27	> 0 &	salience27	!= .

* comm and ep positions (exclude if we want only country positions)
replace utility = utility + (	-	(`i'-	comm	)^2)
replace utility = utility + (	-	(`i'-	ep_1	)^2) if	ep_rule==2

replace utility_star = utility if `i'==0
replace m_mean = `i' if utility > utility_star
replace utility_star = utility if utility > utility_star

local i = `i' + 1
}

order utility utility_star m_mean sq outcome
sort act issue_id
label variable m_mean "mean solution, without reference point"
label variable utility_star "maximized product of actors' utilities" 

* Compute means of absolute differences between outcomes and model predictions
gen mad`m'=abs(m_mean-outcome)
collapse v mad`m'
label variable mad`m' "mean of absolute differences" 
label variable v "s.d of Gaussian noise" 

merge 1:1 v using mad_m_mean_noise.dta, nogen
save mad_m_mean_noise.dta, replace
sort v
pause 1000

       
local v = `v' + 1 /* increments of s.d. */
}

local m = `m' + 1 /* simulations */
}

egen m_mean = rowmean(mad*)
label variable m_mean "mean of absolute differences across m simulations" 
egen m_mean_u = rowpctile(mad*), p(97.5)
label variable m_mean_u "upper boundary" 
egen m_mean_l = rowpctile(mad*), p(2.5)
label variable m_mean_l "lower boundary" 

drop mad*
save mad_m_mean_noise.dta, replace

exit

